分享你的应用 (Sharing Your App)
创建完 Gradio 应用后,你可能希望与他人分享。Gradio 提供了多种方式来分享你的应用,从快速的临时链接到永久托管方案。
1. 临时公共链接 (share=True
)
最快捷的分享方式是在 launch()
方法中设置 share=True
。这会生成一个 .gradio.live
的公共链接,任何人都可以通过这个链接在浏览器中访问你的应用,有效期通常为 72 小时。
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
# demo.launch(share=True) # 取消注释以生成公共链接
- 工作原理:这个链接通过 SSH 隧道连接到你的本地服务器。Gradio 的共享服务器仅作为代理,不会存储任何通过应用发送的数据。
- 注意事项:由于链接是公开的,请确保你的应用不会暴露敏感信息或允许对你的设备进行有害操作。你可以考虑为应用添加身份验证。
- 默认行为:除了在 Google Colab Notebooks 中,
share
参数默认为False
,即应用仅在本地运行。
2. 在局域网内分享
如果你想在本地网络(例如,与同一 Wi-Fi 网络下的同事)分享应用,可以在 launch()
时将 server_name
设置为 "0.0.0.0"
。
# demo.launch(server_name="0.0.0.0", server_port=7860) # 使用你机器的局域网 IP 和指定端口访问
其他用户可以通过你的计算机在局域网中的 IP 地址和指定的端口(默认为 7860)来访问应用,例如 http://192.168.1.XX:7860
。
3. 永久托管在 Hugging Face Spaces
如果你需要一个永久的在线链接,Hugging Face Spaces 是一个绝佳的选择。它为 Gradio 应用提供了免费的托管服务。
有两种主要方式将应用部署到 Spaces:
- 使用 Gradio CLI:在你的应用目录下运行
gradio deploy
。CLI 会引导你完成部署过程。你可以之后通过再次运行此命令或设置 GitHub Actions 来更新 Space。 - 通过网页界面:在 Hugging Face 网站上创建一个新的 Space,然后拖拽包含你的
app.py
和其他所需文件的文件夹进行上传。
参考 Hugging Face 关于托管的指南 获取更详细信息。
4. 嵌入到其他网页
一旦你的应用托管在 Hugging Face Spaces 或你自己的服务器上,你可以将其嵌入到其他网站,如博客或作品集。
使用 Web Components (推荐)
Web Components 通常提供比 iFrames 更好的用户体验,它们支持懒加载并且能自动调整高度。
在你的网站中引入 Gradio 的 JavaScript 库:
html<script type="module" src="https://gradio.s3-us-west-2.amazonaws.com/{GRADIO_VERSION}/gradio.js" ></script>
(请将
{GRADIO_VERSION}
替换为你使用的 Gradio 版本)在你想要嵌入应用的地方添加
<gradio-app>
标签:html<gradio-app src="https://YOUR_SPACE_HOST.hf.space"></gradio-app>
或者,如果应用托管在 Hugging Face Spaces,可以使用简写:
html<gradio-app space="username/space_name"></gradio-app>
<gradio-app>
标签支持多种属性以自定义外观和行为,例如initial_height
,theme_mode
,autoscroll
等。
使用 iFrames
如果无法使用 JavaScript,你可以使用 iFrame:
<iframe src="https://YOUR_SPACE_HOST.hf.space" width="100%" height="500px" style="border:0;"></iframe>
你需要手动设置 height
,并可能需要通过 allow
属性授予摄像头或麦克风等权限。
5. 通过 API 使用
大多数 Gradio 应用都会自动提供 API 接口。在应用页脚通常会有一个 "Use via API" 的链接,点击后可以看到可用的 API 端点以及如何通过 gradio_client
(Python) 或 @gradio/client
(JavaScript) 调用它们。
对于 gr.Blocks
应用,你可以为事件监听器指定 api_name
来命名 API 端点:
import gradio as gr
def add(a, b):
return a + b
with gr.Blocks() as demo:
num1 = gr.Number()
num2 = gr.Number()
output = gr.Number()
btn = gr.Button("Add")
btn.click(add, [num1, num2], output, api_name="addition")
# demo.launch() # 访问 /api/addition/ 来调用
6. 挂载到 FastAPI 应用
如果你有一个现有的 FastAPI 应用,可以将 Gradio 应用挂载到特定路径下:
from fastapi import FastAPI
import gradio as gr
fastapi_app = FastAPI()
@fastapi_app.get("/")
def read_main():
return {"message": "This is your main FastAPI app"}
def greet(name):
return "Hello " + name + "!"
gradio_app = gr.Interface(fn=greet, inputs="text", outputs="text")
app = gr.mount_gradio_app(fastapi_app, gradio_app, path="/gradio")
# 使用 uvicorn 启动: uvicorn main:app --reload
# 然后访问 http://localhost:8000/gradio
7. 部署到自己的服务器
对于生产环境,你可能希望将 Gradio 应用部署到自己的服务器上,通常会结合 Docker 和反向代理 (如 Nginx) 进行部署。
- Dockerize:创建一个
Dockerfile
来打包你的应用及其依赖。 - Nginx/Apache:配置 Web 服务器作为反向代理,处理 SSL、负载均衡等。
这通常涉及到更高级的部署策略,具体配置取决于你的服务器环境和需求。
8. 身份验证
Gradio 支持多种身份验证方法来保护你的应用:
- 简单密码保护:在
launch()
中使用auth=("username", "password")
或一个包含多个用户凭据元组的列表。python# demo.launch(auth=("admin", "securepassword123"))
- 自定义认证函数:传递一个函数给
auth
参数,该函数接收用户名和密码,返回True
(允许访问) 或False
(拒绝访问)。 - OAuth (通过 Hugging Face):通过在 Space 的
README.md
中配置hf_oauth: true
并使用gr.LoginButton()
,可以实现 "Sign in with Hugging Face" 功能。 - 外部 OAuth 提供商:结合 FastAPI 挂载和
auth_dependency
,可以集成如 Google OAuth 等外部提供商。
9. 其他注意事项
- 深层链接 (Deep Links):使用
gr.DeepLinkButton()
组件可以在应用中创建一个按钮,生成一个包含当前所有组件状态的唯一 URL。这对于分享特定的应用状态或结果非常有用。 - 文件访问与安全:了解 Gradio 如何处理文件访问权限 (
allowed_paths
,blocked_paths
) 以及文件上传大小限制 (max_file_size
) 非常重要,以确保应用的安全性。 - 渐进式 Web 应用 (PWA):通过设置
launch(pwa=True)
,可以将 Gradio 应用作为 PWA 提供,允许用户将其"安装"到设备上。
选择合适的分享和部署方法取决于你的具体需求,例如应用的受众、安全性要求以及是否需要永久托管等。